/**
 * 权限控制
 */

import NProgress from "nprogress"
import store from "./store"
import router, { asyncRoutes } from "./router"
import "nprogress/nprogress.css"

// NProgress配置
NProgress.configure({ showSpinner: false })

const loginPath = "/login"
const defaultPath = "/"
// 免登录白名单
const whiteList = ["/login"]

router.beforeEach(async (to, from, next) => {
    NProgress.start()
    // 开始 Progress Bar
    to.meta?.title && (document.title = to.meta.title as string)
    const token = store.getters.token
    if (token) {
        // 获取用户信息
        if (store.getters.permission == null) {
            store.commit("permission/setSidebar", asyncRoutes[0].children)
            await store.dispatch("user/getUser")
            await store.dispatch("permission/getPermission")
        }
        if (to.path === loginPath) {
            next({ path: defaultPath })
        } else {
            next()
        }
    } else {
        if (whiteList.includes(to.path as string)) {
            // 在免登录白名单，直接进入
            next()
        } else {
            next({ path: loginPath, query: { redirect: to.fullPath } })
        }
    }
})

router.afterEach(async (to, from) => {
    NProgress.done()
})
